﻿/******************************************************************************
    myBoard is a port of MacOS X dashboard application for windows.
    Copyright (C) 2007,2008  by Yann ALET
    Email : yann.alet@gmail.com

    myBoard is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    myBoard is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
****************************************************************************/

using System;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Effects;

namespace ShaderEffects
{
    public class ScaleEffect : ShaderEffect {

        public ScaleEffect()
        {
            PixelShader = _pixelShader;

            UpdateShaderValue(TextureProperty);
            UpdateShaderValue(ScaleFactorProperty);
        }

        public Brush Texture
        {
            get { return (Brush)GetValue(TextureProperty); }
            set { SetValue(TextureProperty, value); }
        }

        public double ScaleFactor
        {
            get { return (double)GetValue(ScaleFactorProperty); }
            set { SetValue(ScaleFactorProperty, value); }
        }        

        public static readonly DependencyProperty TextureProperty =
            RegisterPixelShaderSamplerProperty("Texture", typeof(ScaleEffect), 0);

        public static readonly DependencyProperty ScaleFactorProperty =
            DependencyProperty.Register("ScaleFactor", typeof(double), typeof(ScaleEffect), 
                                        new UIPropertyMetadata(1.0, PixelShaderConstantCallback(0)));

        private static readonly PixelShader _pixelShader =
            new PixelShader() { UriSource = Utils.MakePackUri("ScaleEffect.ps") };
    }
}